iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
Build on Google AI

《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》系列 第 21 篇

AlphaGenome Atlas 實戰 | Day 21 | 專案架構設計 —— 從 VCF 檔出發的虛擬罕病篩選流水線

  • 分享至 

  • xImage
  •  

💡 導讀:給實習醫生看數據,如果沒給「診斷指南」,會發生什麼事?

如果有一位剛進醫院的實習醫生,你直接塞給他一張印滿密密麻麻數字的血液檢查報告,卻完全不告訴他正常人的參考數值、也不教他如何判斷數字高低的背後原因。

这位實習醫生大概只能對著數字發呆,或者給出一段語焉不詳、毫無臨床價值的廢話。

在 AI 世界裡也是一樣的道理!我們之前整理出了資料處理產線,能秒速抓出 AVI 評分、算出了大腦神經元裡的 Delta Score 訊號落差。但對 Gemini 大語言模型(LLM)來說,如果沒有經過嚴格的 「系統指令(System Instruction)」 培訓,它看到的依然只是一堆冷冰冰的數字。

接下來要開始進入 AI Agent 臨床大腦整合 ,我們要教大家如何在 Google AI Studio 中為 Gemini 植入「頂級基因醫師的臨床推理大腦」,讓它能讀懂 Python 後端傳來的數據包,並輸出充滿生物學邏輯的專業診斷報告!


一、 為什麼單靠 Python 還不夠?從「數據處理器」升級為「臨床推理大腦」

在一個真正的智慧醫療系統中,後端程式碼與 AI 大語言模型扮演著完全不同的角色:

  • Python 資料管線(後端數據處理器):
    就像是 「醫事檢驗師」。它負責去 1 PB 資料庫裡跑腿、抓 VCF 數據、計算矩陣減法(Delta Score),確保數據快速且無誤。但它不會寫臨床診斷報告。
  • Gemini LLM(臨床推理大腦):
    就像是 「首席基因診斷醫師」。它拿到了檢驗師遞過來的數據報告後,負責運用強大的語言理解能力,將 AVI 分數、RNA 剪接異常與病患的症狀(如六週大嬰兒癲癇)串聯起來,說出一段「連病患家屬與主治醫師都能聽懂的生物學因果故事」!
    https://ithelp.ithome.com.tw/upload/images/20261003/20183596hrQF0uHvK6.png

二、 訓練 AI 醫師的三大鐵則:角色、思維鏈 (CoT) 與結構化輸出

要讓 Gemini 成熟地進行臨床推理,我們在 Google AI Studio 設定 System Instruction(系統指令) 時,必須嚴格遵循三大鐵則:

  1. 角色與安全邊界(Role & Safety):
    明確定義 AI 的身分是「專精於非編碼區變異解析的臨床基因組學 AI 助理」,並遵守醫學倫理——AI 負責提供推理假說與濕實驗建議,最終診斷仍需人類醫師確認。
  2. 思維鏈推理(Chain of Thought, CoT):
    強迫 AI 按照標準臨床步驟思考,不能跳躍結論:
    • 步驟 A(風險評估):檢查 AVI PHRED 分數是否 (\ge 20)(排名前 1%)。
    • 步驟 B(機制抓包):看特徵歸因是來自 Splicing(RNA 剪接)、CAGE(轉錄量)還是 ATAC(染色質開放度)。
    • 步驟 C(組織特異性):檢查該異常是否發生在與病患症狀(如 epilepsy 癲癇)吻合的器官(如大腦神經元)。
  3. 強制 JSON 結構化輸出(Structured Output):
    要求 AI 必須回傳乾淨的 JSON 格式,方便前端 React 儀表板直接解析並畫出對應的圖卡與燈號!
訓練維度 沒設 System Instruction (傳統聊天 AI) 設定專業 System Instruction (臨床 Agent)
回應風格 講一堆客套廢話:「這是一個很複雜的變異,可能與許多因素有關……」 直奔主題、語氣專業且邏輯嚴密,明確給出機制結論。
資料解析 只會重複一遍數字,看不出分數背後的生物學意義。 辨識機制:「AVI 分數 24.7 高度危險,69% 風險源自大腦神經元隱藏剪接。」
系統整合 回傳純文字 Markdown,前端網頁無法解析欄位。 輸出乾淨 JSON,前端秒速轉化為顏色燈號與卡片!

💻 三、 實作:在 Google AI Studio 打造靈魂 System Instruction 與 Python API 串接(agent_clinical_brain.py)

現在,把這套臨床推理邏輯打包成 Python 腳本 agent_clinical_brain.py。我們將利用 Google GenAI SDK,把之前快取管線產出的數據直接餵給設定好 System Instruction 的 Gemini 0 模型:

import os
import json
from dotenv import load_dotenv
import google.generativeai as genai

# 載入隱藏設定檔中的 Gemini API Key
load_dotenv()
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))

# 1. 定義給 Gemini 的【靈魂系統指令 System Instruction】
CLINICAL_SYSTEM_INSTRUCTION = """
你是一位專精於非編碼區變異解析的臨床基因組學 AI 助理。
請針對傳入的 AlphaGenome 分析數據與病患臨床症狀(Phenotype),按照以下【思維鏈】進行臨床推理:

1. [風險評估]: 檢視 AVI PHRED 分數 (是否 >= 20)。
2. [機制解讀]: 解析 feature_attribution 中的主要驅動機制 (如 Cryptic Splicing, CAGE, ATAC)。
3. [組織與症狀對照]: 判斷該機制是否發生在與病患症狀 (如 epilepsy/hydro) 相關的特異性組織 (如 Brain/Neuron)。
4. [濕實驗建議]: 提出最適合的下游驗證實驗 (如 Minigene Reporter Assay)。

【限制】你必須嚴格回傳符合 JSON Schema 的結構化格式,不得包含任何 Markdown 裝飾文字。
"""

def generate_clinical_report(variant_data, patient_phenotype):
    """將後端資料與症狀打包,呼叫 Gemini 生成臨床推理報告"""

    # 2. 初始化 Gemini 模型並設定 System Instruction
    model = genai.GenerativeModel(
        model_name="gemini-1.5-pro",  # 或使用最新的 Gemini 模型
        system_instruction=CLINICAL_SYSTEM_INSTRUCTION,
        generation_config={"response_mime_type": "application/json"}  # 強制 JSON 輸出
    )

    # 3. 組裝 Prompt 輸入數據包
    user_prompt = f"""
    請針對以下病患數據進行臨床推理:
    【病患臨床症狀】: {patient_phenotype}
    【AlphaGenome 後端數據】: {json.dumps(variant_data, ensure_ascii=False)}
    """

    print("🧠 正在傳送數據給 Gemini 臨床大腦進行推理...")
    response = model.generate_content(user_prompt)

    return json.loads(response.text)

if __name__ == "__main__":
    # 模擬 Day 20 後端快取管線產出的 DNM1 數據包
    mock_pipeline_output = {
        "variant_id": "chr9:128225994:G:A",
        "avi_score": 24.7,
        "top_drivers": [
            {"feature_name": "Splicing_Cryptic_Acceptor", "contribution_weight": 0.69},
            {"feature_name": "ATAC_Brain_Neuron", "contribution_weight": 0.20}
        ],
        "delta_signal": "+0.85 (Splicing Increase in Glutamatergic Neurons)"
    }

    # 執行 Agent 臨床推理
    clinical_report = generate_clinical_report(
        variant_data=mock_pipeline_output,
        patient_phenotype="六週大幼兒,出現難治型頑固癲癇 (Epileptic Encephalopathy)"
    )

    print("\n" + "="*50)
    print("🩺 Gemini Agent 生成的臨床診斷推理報告 (JSON):")
    print(json.dumps(clinical_report, ensure_ascii=False, indent=2))
    print("="*50 + "\n")

執行這段程式碼後,Gemini 會像一位頂級基因醫師一樣,輸出結構完美的 JSON 診斷報告,清楚寫明:「此變異 AVI 評分 24.7(前 0.3% 高風險),強烈受大腦神經元隱藏剪接驅動(貢獻度 69%),完美解釋了六週大幼兒的癲癇症狀,建議進行 Minigene 剪接驗證實驗。」!



上一篇
AlphaGenome Atlas 實戰 | Day 20 | 玩轉學術 Portal —— 透過視覺化介面探索 2,500 種調控基序
下一篇
AlphaGenome Atlas 實戰 | Day 22 | 數據前處理與初篩 —— 使用 Python 提取與過濾候選非編碼變異
系列文
《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》 共 23 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言